package test.basic.hashmap;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description
 * @Author MengXuhui
 * @Date 2023/8/13
 **/
public class Main {
    public static void main(String[] args) {
        //创建hashmap对象时并没有初始化数组，只有在第一次put时才会初始化数组
        Map<String, Object> map = new HashMap<>();
        map.put("111", "11");
        System.out.println(map);


        int hash1 = 34;
        int hash2 = 18;
        //旧数组长度
        int length = 16;
        /**
         * 34 & (16-1) = 2
         *
         *   0010 0010
         * & 0000 1111
         * ============
         *   0000 0010 = 2
         * <p>
         * 18 & (16-1) = 2
         *
         *  0001 0010
         *  0000 1111
         *  ===========
         *  0000 0010 = 2
         *
         * 可以发现只要比较后面四位就可以了,因为前面都是0,0与任何数做与运算都是0
         */
        System.out.println(hash1 & (length - 1));//2
        System.out.println(hash2 & (length - 1));//2
        length = 32;
        /**
         * 34 & (32-1) = 2
         *
         *   0010 0010
         * & 0001 1111
         * ============
         *   0000 0010 = 2
         * <p>
         * 18 & (32-1) = 18
         *
         *   0001 0010
         * & 0001 1111
         * ============
         *   0001 0010 = 18
         *
         * 可以发现与上面对比只多比较了一位,为这一位正好表示的是原本的长度
         */
        System.out.println(hash1 & (length - 1));//2
        System.out.println(hash2 & (length - 1));//18
    }
}